/******************************************************************************
 cnome: A C++ source "genes" discover. :-)

 See more details at:

   http://www.codeplex.com/cnome

 The original author site is at: http://www.alexandre-barbosa.com/

 Copyright (c) 2008 Alexandre Barbosa.
 Distributed under the MIT License. (See accompanying file LICENSE-MIT.txt 
 or at http://www.codeplex.com/cnome/license)
 ******************************************************************************/

#ifndef ACTIONS_H
#define ACTIONS_H

#include <string>

#include "cnome_iterator.h"

namespace cnome { namespace actions {
    void newClass_Name(cnome_iterator first, cnome_iterator last);
    void newEnum_Name(cnome_iterator first, cnome_iterator last);
    void newTypedef_Name(cnome_iterator first, cnome_iterator last);
    void newNamespace_Alias(cnome_iterator first, cnome_iterator last);
    void newOriginal_Namespace_Name(cnome_iterator first, cnome_iterator last);
    void newTemplate_Name(cnome_iterator first, cnome_iterator last);
    void newEnumerator(cnome_iterator first, cnome_iterator last);
    void newMember(cnome_iterator first, cnome_iterator last);
    void enter_scope(cnome_iterator first, cnome_iterator last);
    void leaveScope(cnome_iterator first, cnome_iterator last);
	void scopeIsAbsolut(cnome_iterator first, cnome_iterator last);
    void enterMethodScp(cnome_iterator first, cnome_iterator last);
    void enterScopeMth(cnome_iterator first, cnome_iterator last);
    void newMethod(cnome_iterator first, cnome_iterator last);
    void defMethod(cnome_iterator first, cnome_iterator last);
	void clearPrmLevel(cnome_iterator first, cnome_iterator last);
    void newParenMethod(cnome_iterator first, cnome_iterator last);
    void newTmplPrm(cnome_iterator first, cnome_iterator last);
    void newPrm(cnome_iterator first, cnome_iterator last);
    void newPrmVar(cnome_iterator first, cnome_iterator last);
    void cancelPrmVar(cnome_iterator first, cnome_iterator last);
    void last_Identifier(cnome_iterator first, cnome_iterator last);
    void cancelDecl(cnome_iterator first, cnome_iterator last);
    void error_Not_Declared(cnome_iterator first, cnome_iterator last);
    void inFunction_body(cnome_iterator first, cnome_iterator last);
    void outFunction_body(cnome_iterator first, cnome_iterator last);
    void newTypeSpc(cnome_iterator first, cnome_iterator last);
    void new_dcl_spc(cnome_iterator first, cnome_iterator last);
    void declareTmplPrms(cnome_iterator first, cnome_iterator last);
    void declareClassTmplPrms(cnome_iterator first, cnome_iterator last);
	void addUsingDirective(cnome_iterator first, cnome_iterator last);
    void enableHandleTypeDef(cnome_iterator first, cnome_iterator last);
    void disableHandleTypeDef(cnome_iterator first, cnome_iterator last);
    void enableTemplateName(cnome_iterator first, cnome_iterator last);
    void disableTemplateName(cnome_iterator first, cnome_iterator last);
    void isLOpLastSmbGrt(cnome_iterator first, cnome_iterator last);
    void cancelLastPrm(cnome_iterator first, cnome_iterator last);
    void debug_point(cnome_iterator first, cnome_iterator last);

    extern rule_t isSpecialToken;
    extern rule_t isNotSpecialToken;
    extern rule_t CLASS_NAME_HELPER;
    extern rule_t ENUM_NAME_HELPER;
    extern rule_t TYPEDEF_NAME_HELPER;
    extern rule_t NAMESPACE_ALIAS_HELPER;
    extern rule_t ORIGINAL_NAMESPACE_NAME_HELPER;
    extern rule_t TEMPLATE_NAME_HELPER;
    extern rule_t TYPE_DECL_VALID;
    extern rule_t TYPE_DECL_VALID_HELP;
    extern rule_t LASTSMBFLOPISGREATER;
    extern bool isEnableHandleTypeDef;
}} // namespace cnome { namespace actions {
#endif // ACTIONS_H

